package com.smart.buss.ctrl;

import com.smart.buss.service.*;
import com.smart.buss.vo.*;
import com.smart.primary.common.common.BaseCtrl;
import com.smart.primary.common.util.*;
import com.smart.primary.sys.vo.User;
import com.smart.primary.util.DateUtil;
import com.smart.primary.util.SessionUtil;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/buss/tongji")
public class TongjiController extends BaseCtrl {
	private final static Logger logger= Logger.getLogger(TongjiController.class);

	@Autowired
	private BussUserService bussUserService;
	@Autowired
	private BussTaskService bussTaskService;
	@Autowired
	private BussTaskLogService bussTaskLogService;
	@Autowired
	private BussTongjiQudaoService bussTongjiQudaoService;
	@Autowired
	private BussTongjiTaskService bussTongjiTaskService;
	@Autowired
	private BussTongjiUserService bussTongjiUserService;
	@Autowired
	private BussChannelService bussChannelService;

	/**
	 *
	 数据管理
	 1.用户统计
	 查询条件：日期（区间）
	 列表：日期，注册用户数，周注册数，月注册数

	 2.渠道统计
	 查询条件：日期（区间） 渠道编码
	 列表：日期，渠道，注册用户，周注册数，月注册数，总注册数，

	 3.任务统计
	 查询条件：日期（区间） 任务名称
	 列表：日期，任务，领任务次数，审核通过任务次数，完成用户数, 总任务完成数
	 */

	@RequestMapping("/user")
	public AjaxResult user(BussTongjiUser entity,String start,String end) throws Exception{
		entity.setCreateDate(stringToDate(start));
		entity.setUpdateDate(stringToDate(end));
		List<BussTongjiUser> list=bussTongjiUserService.queryListByPage(entity);
		return getResult(entity, list);
	}

	@RequestMapping("/qudao")
	public AjaxResult qudao(BussTongjiQudao entity,String start,String end) throws Exception{
		if(StringUtil.isNotBlank(entity.getQudaoId())){
			BussChannel bussChannel=new BussChannel();
			bussChannel.setName(entity.getQudaoId());
			List<BussChannel> qudaolist=bussChannelService.queryList(bussChannel);
			if(qudaolist!=null && qudaolist.size()>0){
				entity.setQudaoId(qudaolist.get(0).getId());
			}
		}
		entity.setCreateDate(stringToDate(start));
		entity.setUpdateDate(stringToDate(end));
		List<BussTongjiQudao> list=bussTongjiQudaoService.queryListByPage(entity);
		return getResult(entity, list);
	}

	@RequestMapping("/myqudao")
	public AjaxResult myqudao(BussTongjiQudao entity,String start,String end) throws Exception{
		User user = SessionUtil.getUser(request,response);
		if (user == null || StringUtil.isBlank(user.getQudao())) {
			return getResult(entity, new ArrayList<>());
		}
		entity.setQudaoId(user.getQudao());
		entity.setCreateDate(stringToDate(start));
		entity.setUpdateDate(stringToDate(end));
		List<BussTongjiQudao> list=bussTongjiQudaoService.queryListByPage(entity);
		return getResult(entity, list);
	}

	@RequestMapping("/task")
	public AjaxResult task(BussTongjiTask entity, String start, String end) throws Exception{
		if(StringUtil.isNotBlank(entity.getTaskId())){
			BussTask task=new BussTask();
			task.setName(entity.getTaskId());
			List<BussTask> qudaolist=bussTaskService.queryList(task);
			if(qudaolist!=null && qudaolist.size()>0){
				entity.setTaskId(qudaolist.get(0).getId());
			}
		}
		entity.setCreateDate(stringToDate(start));
		entity.setUpdateDate(stringToDate(end));
		List<BussTongjiTask> list=bussTongjiTaskService.queryListByPage(entity);
		return getResult(entity, list);
	}


	@Scheduled(cron = "* 0/10 * * * ?")
	@Transactional
	public void save() throws Exception{
		if(!JobRun.hasStartServer(TongjiController.class.toString())){
			if(JobRun.putStartServer(TongjiController.class.toString())) {
				try {
					BussUser bussUser=new BussUser();
					// 用户的信息统计
					BussTongjiUser user=new BussTongjiUser();
					user.setDateId(dateToStr(new Date()));
					BussTongjiUser bussTongjiuser= bussTongjiUserService.queryObject(user);


					bussUser.setCreateDate(DateUtil.getStartDate(new Date()));
					bussUser.setUpdateDate(DateUtil.getEndDate(new Date()));
					int usernum=bussUserService.queryCount(bussUser);
					user.setUsernum(usernum);

					bussUser.setCreateDate(DateUtil.getStartDate(DateUtil.addDay(-7)));
					bussUser.setUpdateDate(DateUtil.getEndDate(new Date()));
					int weeknum=bussUserService.queryCount(bussUser);
					user.setWeeknum(weeknum);

					bussUser.setCreateDate(DateUtil.getStartDate(DateUtil.addDay(-30)));
					bussUser.setUpdateDate(DateUtil.getEndDate(new Date()));
					int yuenum=bussUserService.queryCount(bussUser);
					user.setYuenum(yuenum);
					if(bussTongjiuser==null){
						user.setId(Util.getUUID());
						bussTongjiUserService.insert(user);
					}else {
						user.setId(bussTongjiuser.getId());
						bussTongjiUserService.update(user);
					}

					// 渠道的信息统计
					List<BussChannel> qudaolist=bussChannelService.queryList(null);
					for (BussChannel qu: qudaolist) {
						BussTongjiQudao qudao=new BussTongjiQudao();
						qudao.setQudaoId(qu.getId());
						qudao.setDateId(dateToStr(new Date()));
						BussTongjiQudao bussTongjiQudao=bussTongjiQudaoService.queryObject(qudao);

						bussUser.setChannel(qu.getId());
						bussUser.setCreateDate(DateUtil.getStartDate(new Date()));
						bussUser.setUpdateDate(DateUtil.getEndDate(new Date()));
						int ausernum=bussUserService.queryCount(bussUser);
						qudao.setUsernum(ausernum);


						bussUser.setCreateDate(null);
						bussUser.setUpdateDate(null);
						int znum=bussUserService.queryCount(bussUser);
						qudao.setZongnum(znum);

						int aweeknum=0;
						int ayuenum=0;
						List<BussUser> list=bussUserService.queryList(bussUser);
						if(list !=null){
							for (BussUser bu:list){
								BussTaskLog bussTaskLog=new BussTaskLog();
								bussTaskLog.setUserId(bu.getId());
								bussTaskLog.setCheckStatus(1);
								aweeknum+=bussTaskLogService.queryCount(bussTaskLog);

								bussTaskLog.setCreateDate(DateUtil.getStartDate(new Date()));
								bussTaskLog.setUpdateDate(DateUtil.getEndDate(new Date()));

								ayuenum+=bussTaskLogService.queryCount(bussTaskLog);
							}
						}

						//'任务完成数'
						qudao.setWeeknum(aweeknum);

						//'总任务完成数'
						qudao.setYuenum(ayuenum);


						if(bussTongjiQudao==null){
							qudao.setId(Util.getUUID());
							bussTongjiQudaoService.insert(qudao);
						}else {
							qudao.setId(bussTongjiQudao.getId());
							bussTongjiQudaoService.update(qudao);
						}

					}

					// 任务的信息统计
					List<BussTask> tasklist=bussTaskService.queryList(null);
					for (BussTask tk: tasklist) {
						BussTongjiTask task=new BussTongjiTask();
						task.setTaskId(tk.getId());
						task.setDateId(dateToStr(new Date()));
						BussTongjiTask bussTongjiTask=bussTongjiTaskService.queryObject(task);



						BussTaskLog bussTaskLog=new BussTaskLog();
						bussTaskLog.setTaskId(tk.getId());
						bussTaskLog.setCreateDate(DateUtil.getStartDate(new Date()));
						bussTaskLog.setUpdateDate(DateUtil.getEndDate(new Date()));
						int shenhe=bussTaskLogService.queryCount(bussTaskLog);  // 1  2  数量
						bussTaskLog.setCheckStatus(0);
						int tjiao=bussTaskLogService.queryCount(bussTaskLog);  // 0
						bussTaskLog.setCheckStatus(3);
						int shibai=bussTaskLogService.queryCount(bussTaskLog);  // 3
						bussTaskLog.setCheckStatus(-1);
						int lingqu=bussTaskLogService.queryCount(bussTaskLog);  // -1

						task.setGetnum(shenhe+tjiao+shibai+lingqu);
						task.setChecknum(shenhe+shibai);
						task.setDonenum(shenhe+tjiao);

						BussTaskLog abussTaskLog=new BussTaskLog();
						abussTaskLog.setTaskId(tk.getId());
						int zong=bussTaskLogService.queryCount(abussTaskLog);
						task.setZongnum(zong);
						if(bussTongjiTask==null){
							task.setId(Util.getUUID());
							bussTongjiTaskService.insert(task);
						}else {
							task.setId(bussTongjiTask.getId());
							bussTongjiTaskService.update(task);
						}

					}

				} finally {
					JobRun.delStartServer(TongjiController.class.toString());
				}
			}
		}
	}

}
